1 //+------------------------------------------------------------------+
\r
2 //| Lets Go Where Price Goes EA, v1.0.0 |
\r
3 //| Copyright © 2011 |
\r
5 //+------------------------------------------------------------------+
\r
6 // modified by WL Tam
\r
7 #property copyright "Copyright © 2011, trapule@gmail.com"
\r
8 #property link "trapule@gmail.com"
\r
10 extern string info1 = "Magic number";
\r
11 extern int magicnumber = 20110110;
\r
12 extern string info2 = "Pip distance between levels";
\r
13 extern int pipstep = 20;
\r
14 extern string info3 = "Fixed lot for each order";
\r
15 extern double fixedlot = 0.1;
\r
16 extern int maxpip = 80;
\r
21 double pip,refup, refdown;
\r
24 //+------------------------------------------------------------------+
\r
25 //| expert initialization function |
\r
26 //+------------------------------------------------------------------+
\r
29 if (Digits==2 || Digits==3) pip=0.01;
\r
30 else if (Digits==4 || Digits==5) pip=0.0001;
\r
34 //+------------------------------------------------------------------+
\r
35 //| expert deinitialization function |
\r
36 //+------------------------------------------------------------------+
\r
44 //+------------------------------------------------------------------+
\r
45 //| expert start function |
\r
46 //+------------------------------------------------------------------+
\r
49 // no pending order or no active order
\r
50 if ( count(OP_BUY) + count(OP_SELL) + count(OP_BUYSTOP) + count(OP_SELLSTOP) == 0)
\r
53 if (iMA(Symbol(),PERIOD_M5,21,0,MODE_EMA,PRICE_CLOSE,0) < (Ask/2 + Bid /2))
\r
55 refup = Ask + 0.5*pipstep*pip;
\r
56 refdown = refup - pipstep*pip;
\r
57 Print(iMA(Symbol(),PERIOD_M5,21,0,MODE_EMA,PRICE_CLOSE,0)," BUY ", (Ask/2 + Bid /2));
\r
58 Print("refup =",refup," || refdown =",refdown);
\r
59 OrderSend (Symbol(), OP_BUYSTOP, fixedlot,refup , 100, refdown, 0.0, "Lets Go Where Price Goes", magicnumber,0,Blue);
\r
61 if (iMA(Symbol(),PERIOD_M5,21,0,MODE_EMA,PRICE_CLOSE,0) > (Ask/2 + Bid /2))
\r
63 refdown = Bid - 0.5*pipstep*pip;
\r
64 refup = refdown + pipstep*pip;
\r
65 Print(iMA(Symbol(),PERIOD_M5,21,0,MODE_EMA,PRICE_CLOSE,0)," SELL ", (Ask/2 + Bid /2));
\r
66 Print("refup =",refup," || refdown =",refdown);
\r
67 OrderSend (Symbol(), OP_SELLSTOP, fixedlot, refdown, 100, refup, 0.0, "Lets Go Where Price Goes", magicnumber,0,Red);
\r
70 // no active order but trend changed
\r
71 if ( count(OP_BUY) + count(OP_SELL) == 0)
\r
73 if( count(OP_BUYSTOP)== 1 && iMA(Symbol(),PERIOD_M5,21,0,MODE_EMA,PRICE_CLOSE,0) > (Ask/2 + Bid /2))
\r
75 Print("trend from buy to sell");
\r
76 OrderSelect(0, SELECT_BY_POS);
\r
77 OrderDelete(OrderTicket());
\r
79 if( count(OP_SELLSTOP)== 1 && iMA(Symbol(),PERIOD_M5,21,0,MODE_EMA,PRICE_CLOSE,0) < (Ask/2 + Bid /2))
\r
81 Print("trend from sell to buy");
\r
82 OrderSelect(0, SELECT_BY_POS);
\r
83 OrderDelete(OrderTicket());
\r
87 // no pending order
\r
88 if( (count(OP_BUYSTOP) + count(OP_SELLSTOP)) == 0 && (count(OP_BUY)+count(OP_SELL))>0)
\r
93 refup = refup + pipstep*pip;
\r
94 refdown = refup - pipstep*pip;
\r
95 OrderSend (Symbol(), OP_BUYSTOP, fixedlot,refup , 100, refdown, 0.0, "Lets Go Where Price Goes", magicnumber,0,Blue);
\r
97 if(count(OP_SELL)>0)
\r
99 refup = refup - pipstep*pip;
\r
100 refdown = refup - pipstep*pip;
\r
101 OrderSend (Symbol(), OP_SELLSTOP, fixedlot, refdown, 100, refup, 0.0, "Lets Go Where Price Goes", magicnumber,0,Red);
\r
105 for (i=OrdersTotal()-1; i>=0; i--)
\r
107 OrderSelect(i, SELECT_BY_POS);
\r
108 if(OrderType() == OP_BUY && OrderMagicNumber()==magicnumber && OrderSymbol()==Symbol())
\r
110 OrderModify (OrderTicket(), OrderOpenPrice(),refdown - pipstep*pip, 0.0, 0,LightBlue);
\r
112 if(OrderType() == OP_SELL && OrderMagicNumber()==magicnumber && OrderSymbol()==Symbol())
\r
114 OrderModify (OrderTicket(), OrderOpenPrice(), refup + pipstep*pip, 0.0, 0,Tomato);
\r
121 for (i=OrdersTotal()-1; i>=0; i--)
\r
123 OrderSelect(i, SELECT_BY_POS);
\r
124 if((count(OP_BUYSTOP) + count(OP_SELLSTOP)) == 1 && OrderOpenPrice() - Bid > pipstep*pip)
\r
129 //+------------------------------------------------------------------+
\r
131 //double ndd (double Price)
\r
133 // return (NormalizeDouble(Price,Digits));
\r
135 //double ndi (double Value)
\r
137 // return (NormalizeDouble(Value,0));
\r
139 //+------------------------------------------------------------------+
\r
149 for(i=0;i<OrdersTotal();i++)
\r
151 OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
\r
152 if(OrderMagicNumber()==magicnumber && OrderSymbol()==Symbol())
\r
154 if(OrderType()==OP_BUY)
\r
158 if(OrderType()==OP_SELL)
\r
162 if(OrderType()==OP_BUYSTOP)
\r
166 if(OrderType()==OP_SELLSTOP)
\r
172 if(a==OP_BUY){return(buy);}
\r
173 if(a==OP_SELL){return(sell);}
\r
174 if(a==OP_BUYSTOP){return(buystop);}
\r
175 if(a==OP_SELLSTOP){return(sellstop);}
\r
181 for (i=OrdersTotal()-1; i>=0; i--)
\r
183 OrderSelect(i, SELECT_BY_POS);
\r
185 if (OrderMagicNumber()==magicnumber && OrderSymbol()==Symbol())
\r
187 if (OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP)
\r
188 OrderDelete(OrderTicket());
\r
190 if (OrderType()==OP_BUY)
\r
191 OrderClose(OrderTicket(),OrderLots(),Bid,100);
\r
193 if (OrderType()==OP_SELL)
\r
194 OrderClose(OrderTicket(),OrderLots(),Ask,100);
\r